for(i=1;A.elem[i]||B.elem[i];i++)什么意思啊

来源:百度知道 编辑:UC知道 时间:2024/05/15 00:37:19
2.12 设A=(a1,....an)和B=b1,.....bn)均为顺序表,A'和B’分别为A和B中除去最大的共同前缀的子表
(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则最大共同前缀为(x,y,y,z),在两表中除去最大共同前缀后的子表分别为A’=(x,z)和B'=(y,x,x,z))
若A’=B’=空表则A=B 否则比较两子表的首元素 若A’中的首元素大return A>B 否则B>A

答案为
int ListComp(SqList A,SqList B)//比较字符表A和B,并用返回值表示结果,值为正,表示A>B;值为负,表示A<B;值为零,表示A=B
{
for(i=1;A.elem[i]||B.elem[i];i++)
if(A.elem[i]!=B.elem[i]) return A.elem[i]-B.elem[i];
return 0;
}//ListComp
问题
A.elem[i]||B.elem[i]是什么意思 难道不应该用A.elem[i]==B.elem[i]?
答对了再补充20分
1楼的 我不知道你是不是弄清题目了 请你再仔细看看 或者仔细解释下

A.elem[i]||B.elem[i] 是一个逻辑判断,表示,如果A.elem[i]为真,或者B.elem[i]为真,则逻辑表达式的结果就为真。
与别的语言一样,C#采用短路运算来提高逻辑判断的效率。比如,如果A.elem[i]为真,那么程序执行的时候就根本不会去执行B.elem[i]这一部分。因为前面为真,作为||运算,无论B.elem[i]的值是什么,表达式结果都为真。

此处不能用==,因为只要A中的当前元素与B的当前元素不一样,则for循环就退出了,明显不符合要求。使用或(||)运算,确保在A列表或者B列表的当前元素不为空的时候,执行for循环体。如果两者都为空,则表示队列已经结束了,跳出循环。

严蔚敏老师专 ... 1064K 2004-4-27

储量,结点大小见书78页的定义,"4k"为结点中字符数,"4"为指针占存储量,因此"4(k+1)" 是每个结点所占存储量,...for(i=1;A.elem[i]||B.elem[i];i++) if(A.elem[i]!=B.elem[i]) return A.elem[i]-B.elem[i];...
freeweb.nyist.net/~mayujun/1/严蔚敏老师专 ... 1064K 2004-4-27